$import("com.joypard.platform.organization.OrganizationView");

/**
 * 组织机构控制器
 */
K.defCtrl("com.joypard.platform.organization.OrganizationCtrl", {
	OrganizationCtrl : function() {
		this.view = OrganizationView.instance(this);
		this.initEvents();
		this.initListeners();
	},

	initEvents : function() {
		E.addEvents("组织-修改-成功"); // 更新组织信息成功事件
		E.addEvents("组织-新增-成功"); // 新增组织信息成功事件
		E.addEvents("组织-删除-成功"); // 删除组织信息成功事件

		E.addEvents("岗位-修改-成功"); // 更新岗位信息成功事件
		E.addEvents("岗位-新增-成功"); // 新增岗位信息成功事件
		E.addEvents("岗位-删除-成功"); // 刪除位信息成功事件

		E.addEvents("职位-修改-成功"); // 更新岗位信息成功事件
		E.addEvents("职位-新增-成功"); // 新增岗位信息成功事件
		E.addEvents("职位-删除-成功"); // 刪除位信息成功事件

		E.addEvents("组织-人员-添加-成功"); // 刪除位信息成功事件
		E.addEvents("组织-人员-移除-成功"); // 刪除位信息成功事件
	},

	initListeners : function() {
		E.addListener("组织-新增", this.onAddOrg, this);
		E.addListener("组织-修改", this.onUpdateOrg, this);
		E.addListener("组织-删除", this.onDelOrg, this);

		E.addListener("岗位-新增", this.onAddPost, this);
		E.addListener("岗位-修改", this.onUpdatePost, this);
		E.addListener("岗位-删除", this.onDelPost, this);

		E.addListener("职位-新增", this.onAddJob, this);
		E.addListener("职位-修改", this.onUpdateJob, this);
		E.addListener("职位-删除", this.onDelJob, this);

		E.addListener("组织-人员-添加", this.onAddOrgUsers, this);
		E.addListener("组织-人员-移除", this.onDelOrgUsers, this);
	},

	/**
	 * 新增组织
	 */
	onAddOrg : function(formElement) {
		var input = K.input({
			form : formElement,
			success : function(text) {
				var output = K.output(text);
				if (!output.showError()) {
					E.fireEvent("组织-新增-成功", output);
				}
			}
		});
		K.service(OrgDI.urls.addOrg, input);
	},

	/**
	 * 修改组织信息
	 */
	onUpdateOrg : function(formElement) {
		var input = K.input({
			form : formElement,
			success : function(text) {
				var output = K.output(text);
				if (!output.showError()) {
					E.fireEvent("组织-修改-成功", output);
				}
			}
		});
		K.service(OrgDI.urls.updateOrg, input);
	},

	/**
	 * 删除组织信息
	 */
	onDelOrg : function(node) {
		var input = K.input({
			params : {
				orgId : node.attributes.id
			},
			success : function(text) {
				var output = K.output(text);
				if (!output.showError()) {
					E.fireEvent("组织-删除-成功", output);
				}
			}
		});
		K.service(OrgDI.urls.delOrg, input);
	},

	/**
	 * 新增岗位信息
	 */
	onAddPost : function($form) {
		var input = K.input({
			form : $form,
			success : function(text) {
				var output = K.output(text);
				if (!output.showError()) {
					E.fireEvent("岗位-新增-成功", output);
					K.msg({
						msg : "新增岗位成功",
						el : "#postForm"
					});
				}
			}
		});
		K.service(PostDI.urls.addPost, input);
	},

	/**
	 * 修改岗位信息
	 */
	onUpdatePost : function($form) {
		var input = K.input({
			form : $form,
			success : function(text) {
				var output = K.output(text);
				if (!output.showError()) {
					E.fireEvent("岗位-修改-成功", output);
				}
			}
		});
		K.service(PostDI.urls.updatePost, input);
	},

	/**
	 * 删除岗位
	 * 
	 * @param postIds
	 *            岗位ID字符串以','分割
	 */
	onDelPost : function(postIds) {
		var input = K.input({
			data : {
				postIds : postIds
			},
			success : function(text) {
				var output = K.output(text);
				if (!output.showError()) {
					E.fireEvent("岗位-删除-成功", output);
				}
			}
		});
		K.service(PostDI.urls.delPost, input);
	},

	/**
	 * 新增职位
	 */
	onAddJob : function($form) {
		var input = K.input({
			form : $form,
			success : function(text) {
				var output = K.output(text);
				if (!output.showError()) {
					E.fireEvent("职位-新增-成功", output);
				}
			}
		});
		K.service(JobDI.urls.addJob, input);
	},

	/**
	 * 修改职位
	 */
	onUpdateJob : function($form) {
		var input = K.input({
			form : $form,
			success : function(text) {
				var output = K.output(text);
				if (!output.showError()) {
					E.fireEvent("职位-修改-成功", output);
				}
			}
		});
		K.service(JobDI.urls.updateJob, input);
	},

	/**
	 * 删除岗位
	 */
	onDelJob : function(records) {
		var jobIds = K.arrayToStr(records, "id");
		var input = K.input({
			data : {
				jobIds : jobIds
			},
			success : function(text) {
				var output = K.output(text);
				if (!output.showError()) {
					E.fireEvent("职位-删除-成功", output);
				}
			}
		});
		// mock : input.success(K.mockOutput().addParameter("jobIds",
		// input.jobIds).toJson());
		K.service(JobDI.urls.delJob, input);
	},

	/**
	 * 添加用户
	 */
	onAddOrgUsers : function(orgNode, userRecords) {
		var userIds = K.arrayToStr(userRecords, "id"), orgId = orgNode.id;
		var input = K.input({
			data : {
				orgId : orgId,
				userIds : userIds
			},
			success : function(text) {
				var output = K.output(text);
				if (!output.showError()) {
					output.setParameter("userRecords", userRecords);
					E.fireEvent("组织-人员-添加-成功", output);
				}
			}
		});
		K.service(OrgDI.urls.addOrgUsers, input);
	},

	/**
	 * 删除组织用户
	 */
	onDelOrgUsers : function(orgNode, userRecords) {
		var userIds = K.arrayToStr(userRecords, "id"), orgId = orgNode.id;
		var input = K.input({
			data : {
				orgId : orgId,
				userIds : userIds
			},
			success : function(text) {
				var output = K.output(text);
				if (!output.showError()) {
					output.setParameter("userRecords", userRecords);
					E.fireEvent("组织-人员-移除-成功", output);
				}
			}
		});
		K.service(OrgDI.urls.delOrgUsers, input);
	},

	// 静态变量及方法定义
	statics : {
		ROOT_ID : 0,
		isRootId : function(id) {
			return id && id == this.ROOT_ID;
		},

		isRoot : function(attr) {
			return attr && attr.root == this.ROOT_ID;
		},

		isRootNode : function(node) {
			return node && node.isRoot;
		}
	}
});